/*
部分移动
在单个变量的解构内，可以同时使用 `by-move` 和 `by-reference` 模式绑定。
这样做将导致变量的部分移动(partial move)，这意味着变量的某些部分将被移动，而其他
部分将保留。在这种情况下，后面不能整体使用父级变量，但是仍然可以使用只引用(不移动)的部分。
*/
fn main() {
    #[derive(Debug)]
    struct Person {
        name: String,
        age: u8,
    }

    let person = Person {
        name: String::from("aaa"),
        age: 20,
    };

    // `name` 从person 中移走，但是 `age`只是引用
    let Person { name, ref age } = person;
    println!("The person's age is {}", age);
    println!("The person's name is {}", name);

    // 报错！ borrow of partially moved value: `person`
    //println!("The person's struct is {:?}", person);

    // `person`不能使用，但 `person.age` 因为没有被移动而可以继续使用
    println!("The person's age from person struct is {}", person.age);
}